# Sprint 2: Médias Móveis (WMA, SMMA, DEMA, TEMA, HMA)

O objetivo principal deste Sprint é implementar e integrar o próximo lote de indicadores vitais categorizados como Tendência (Trend). Como vimos no Sprint 1, a fundação está incrivelmente sólida, o que nos facilita o aproveitamento de padrões arquiteturais testados. 

Para mantermos a performance máxima na renderização (60 FPS on mobile/web) todos usarão janelas deslizantes otimizadas O(N) nos motores de cálculo matemáticos e *viewport culling* nos `Painters`.

## O Que Será Implementado

Os 5 indicadores abaixo funcionarão como `Overlay` (desenhados por cima do preço):
- **WMA** (Weighted Moving Average)
- **SMMA** (Smoothed Moving Average)
- **DEMA** (Double Exponential Moving Average)
- **TEMA** (Triple Exponential Moving Average)
- **HMA** (Hull Moving Average)

> [!NOTE]
> Dado que todos esses indicadores são médias móveis e compartilham a assinatura base `List<double>`, a sua construção é padronizada: eles terão propriedades simples (como `period` e `color`) análogo ao que já possuímos em `SMAIndicator` e `EMAIndicator`.

## User Review Required

> [!IMPORTANT]  
> Você aprova as cores e opções padrão projetadas abaixo para exibição no aplicativo de exemplo ou possui requisitos específicos para visualização de cada um (por exemplo, predefinição com base nos defaults de tempo do TradingView)?
> 
> - **WMA**: Período 20
> - **SMMA**: Período 20
> - **DEMA**: Período 20
> - **TEMA**: Período 20 
> - **HMA**: Período 9

## Arquivos Afetados & Novos [NEW/MODIFY]

### Domain Models (Models Type & Immutable Classes)
#### [NEW] `lib/src/domain/models/indicators/wma_indicator.dart`
#### [NEW] `lib/src/domain/models/indicators/smma_indicator.dart`
#### [NEW] `lib/src/domain/models/indicators/dema_indicator.dart`
#### [NEW] `lib/src/domain/models/indicators/tema_indicator.dart`
#### [NEW] `lib/src/domain/models/indicators/hma_indicator.dart`

### Engine & Mathematics
#### [NEW] `lib/src/engine/indicators/wma_calculator.dart`
#### [NEW] `lib/src/engine/indicators/smma_calculator.dart`
#### [NEW] `lib/src/engine/indicators/dema_calculator.dart`
#### [NEW] `lib/src/engine/indicators/tema_calculator.dart`
#### [NEW] `lib/src/engine/indicators/hma_calculator.dart`
#### [MODIFY] `lib/src/engine/engine.dart` (Para exportar as calculadoras expostas acima).

### Painters & Drawing (Viewport Culling incluído)
#### [NEW] `lib/src/presentation/painters/indicators/wma_overlay_painter.dart`
#### [NEW] `lib/src/presentation/painters/indicators/smma_overlay_painter.dart`
#### [NEW] `lib/src/presentation/painters/indicators/dema_overlay_painter.dart`
#### [NEW] `lib/src/presentation/painters/indicators/tema_overlay_painter.dart`
#### [NEW] `lib/src/presentation/painters/indicators/hma_overlay_painter.dart`

### Providers (Riverpod StateNotifiers)
#### [NEW] (ou modificado) `lib/src/presentation/providers/indicator_providers.dart` (ou arquivos separados providos para encapsular a lógica global que reflete state = value do provider).

### Integração Gráfica End-to-End
#### [MODIFY] `lib/src/presentation/widgets/chart_widget.dart` (Integração de instâncias dos painters por cima do canvas do `drawOverlay()`)
#### [MODIFY] `example/lib/main.dart` (Adicionar as checkboxes e booleanos de reatividade).

## Plano de Verificação Automática & Manual

### Automated Code Generation 
- Todos os "Value objects" e classes Freezed (`XXXIndicator`) receberão run de `build_runner`.

### Automated Testing (Post-Build)
- Rodaremos `dart analyze` na conclusão para varrer erros de parâmetros posicionais (semelhante ao issue que observamos no Sprint 1 final).

### Manual Verification
- Assim como no Sprint 1, compilaremos (caso solicitado) ou garantiremos validade ligando-os na UI de exemplo testável pra que você possa vê-los na tela em múltiplas cores.
